import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
url = "https://raw.githubusercontent.com/bcaffo/MRIcloudT1volumetrics/master/inst/extdata/multilevel_lookup_table.txt"
multilevel_lookup = pd.read_csv(url, sep = "\t").drop(['Level5'], axis = 1)
multilevel_lookup = multilevel_lookup.rename(columns = {
"modify" : "roi",
"modify.1" : "level4",
"modify.2" : "level3",
"modify.3" : "level2",
"modify.4" : "level1"})
multilevel_lookup = multilevel_lookup[['roi', 'level4', 'level3', 'level2', 'level1']]
subjectData = pd.read_csv('https://raw.githubusercontent.com/smart-stats/ds4bio_book/main/book/assetts/kirby21AllLevels.csv').drop(['Unnamed: 0'], axis = 1)
subjectData = subjectData.loc[(subjectData.type == 1) & (subjectData.level == 5) & (subjectData.id == 127)]
subjectData = subjectData[['roi', 'volume']]
subjectData = pd.merge(subjectData, multilevel_lookup, on = "roi")
subjectData = subjectData.assign(icv = "ICV")
subjectData = subjectData.assign(comp = subjectData.volume / np.sum(subjectData.volume))
lv1=subjectData.groupby(['icv', 'level1'], as_index=False)['comp'].count()
lv2=subjectData.groupby(['level1', 'level2'], as_index=False)['comp'].count()
lv3=subjectData.groupby(['level2','level3'], as_index=False)['comp'].count()
lv1.columns = ['target', 'source', 'comp']
lv2.columns = ['target', 'source', 'comp']
lv3.columns = ['target', 'source', 'comp']
app1 = lv1.append(lv2)
app2 = app1.append(lv3)
lv3_nodes = app2.target.values.tolist() + app2.source.values.tolist()
source_indices = [lv3_nodes.index(target) for target in app2.target]
target_indices = [lv3_nodes.index(source) for source in app2.source]
fig = go.Figure(data=[go.Sankey(
node = dict(
label = lv3_nodes,
color = "blue"
),
link = dict(
source = source_indices,
target = target_indices,
value = subjectData.comp,
))])
fig.update_layout(title_text="MRICloud data for Subject ID 127 (Levels 1-3)",
font_size=10)
fig.show()